package com.basicalg.impls;

import com.basicalg.helper.AlgHelper;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;

import java.util.ArrayList;
import java.util.List;

//选择排序，将右边没有排序跟当前选择的最小值比较，如果小于当前最小则交换。默认第一个值为最小值
public class SelectionSort {
    public static void sort(Comparable[] array) {
        int min =0;
        // 将 array[] 升序排列
        for(int i =0; i < array.length; i++) {
            min = i;
            for (int j= i+1; j < array.length; j++) {
                if (AlgHelper.less(array[j], array[min])) min = j;
                AlgHelper.swap(array, i, min);

            }
        }
    }

    public static List<HBox> getSortPanes(int[] arr) {
        int min =0;
        // 将 array[] 升序排列
        List<HBox> paneList = new ArrayList<>();
        AlgHelper.TotalAndMax totalAndMax = AlgHelper.getTotalAndMax(arr);
        HBox hBoxIndexes = AlgHelper.drawIndexes(arr.length, "i", "Min");
        paneList.add(hBoxIndexes);
        for(int i =0; i < arr.length; i++) {
            min = i;
            for (int j= i+1; j < arr.length; j++)
                if (AlgHelper.less(arr[j], arr[min])) min = j;
            AlgHelper.printArray(arr);
            HBox p = AlgHelper.drawStates(arr,totalAndMax.getMax(), (int)totalAndMax.getTotal(), i, min);
            paneList.add(p);
            AlgHelper.swap(arr, i, min);
        }
        return paneList;
    }
}
